//package com.bto.solar.work.fdd;
//
//import com.fasc.open.api.bean.base.BaseRes;
//import com.fasc.open.api.bean.common.Actor;
//import com.fasc.open.api.bean.common.ActorCorpMember;
//import com.fasc.open.api.bean.common.Field;
//import com.fasc.open.api.bean.common.Notification;
//import com.fasc.open.api.bean.common.OpenId;
//import com.fasc.open.api.enums.common.ActorPermissionEnum;
//import com.fasc.open.api.enums.common.ActorTypeEnum;
//import com.fasc.open.api.enums.common.FieldTypeEnum;
//import com.fasc.open.api.enums.common.IdTypeEnum;
//import com.fasc.open.api.enums.common.NotifyWayEnum;
//import com.fasc.open.api.enums.common.PositionModeEnum;
//import com.fasc.open.api.enums.doc.FileTypeEnum;
//import com.fasc.open.api.enums.signtask.SignTaskStatusEnum;
//import com.fasc.open.api.enums.template.SignerSignMethodEnum;
//import com.fasc.open.api.exception.ApiException;
//import com.fasc.open.api.utils.ResultUtil;
//import com.fasc.open.api.v5_1.client.EUIClient;
//import com.fasc.open.api.v5_1.client.SignTaskClient;
//import com.fasc.open.api.v5_1.req.signtask.AddActorsInfo;
//import com.fasc.open.api.v5_1.req.signtask.AddActorsReq;
//import com.fasc.open.api.v5_1.req.signtask.AddActorsTempInfo;
//import com.fasc.open.api.v5_1.req.signtask.AddAttachInfo;
//import com.fasc.open.api.v5_1.req.signtask.AddAttachReq;
//import com.fasc.open.api.v5_1.req.signtask.AddDocInfo;
//import com.fasc.open.api.v5_1.req.signtask.AddDocReq;
//import com.fasc.open.api.v5_1.req.signtask.AddFieldInfo;
//import com.fasc.open.api.v5_1.req.signtask.AddFieldReq;
//import com.fasc.open.api.v5_1.req.signtask.AddSignConfigInfo;
//import com.fasc.open.api.v5_1.req.signtask.AddSignFieldInfo;
//import com.fasc.open.api.v5_1.req.signtask.BlockReq;
//import com.fasc.open.api.v5_1.req.signtask.BusinessSceneInfo;
//import com.fasc.open.api.v5_1.req.signtask.CreateSignTaskReq;
//import com.fasc.open.api.v5_1.req.signtask.CreateWithTemplateReq;
//import com.fasc.open.api.v5_1.req.signtask.DeleteActorReq;
//import com.fasc.open.api.v5_1.req.signtask.DeleteAttachReq;
//import com.fasc.open.api.v5_1.req.signtask.DeleteDocReq;
//import com.fasc.open.api.v5_1.req.signtask.DeleteFieldInfo;
//import com.fasc.open.api.v5_1.req.signtask.DeleteFieldReq;
//import com.fasc.open.api.v5_1.req.signtask.DocFieldValueInfo;
//import com.fasc.open.api.v5_1.req.signtask.FillFieldValuesReq;
//import com.fasc.open.api.v5_1.req.signtask.GetApprovalInfoReq;
//import com.fasc.open.api.v5_1.req.signtask.GetBatchSignUrlReq;
//import com.fasc.open.api.v5_1.req.signtask.GetOwnerDownloadUrlReq;
//import com.fasc.open.api.v5_1.req.signtask.GetOwnerSignTaskListReq;
//import com.fasc.open.api.v5_1.req.signtask.GetSignTaskUrlReq;
//import com.fasc.open.api.v5_1.req.signtask.ListSignTaskActorReq;
//import com.fasc.open.api.v5_1.req.signtask.ListSignTaskFieldReq;
//import com.fasc.open.api.v5_1.req.signtask.SignTaskActorGetUrlReq;
//import com.fasc.open.api.v5_1.req.signtask.SignTaskBaseReq;
//import com.fasc.open.api.v5_1.req.signtask.SignTaskCancelReq;
//import com.fasc.open.api.v5_1.req.signtask.SignTaskCatalogListReq;
//import com.fasc.open.api.v5_1.req.signtask.SignTaskListFilter;
//import com.fasc.open.api.v5_1.req.signtask.TemplateSignConfigInfoReq;
//import com.fasc.open.api.v5_1.req.signtask.UnblockReq;
//import com.fasc.open.api.v5_1.res.signtask.BatchSignUrlRes;
//import com.fasc.open.api.v5_1.res.signtask.CreateSignTaskRes;
//import com.fasc.open.api.v5_1.res.signtask.GetApprovalInfoRes;
//import com.fasc.open.api.v5_1.res.signtask.GetSignTaskEditUrlRes;
//import com.fasc.open.api.v5_1.res.signtask.GetSignTaskListRes;
//import com.fasc.open.api.v5_1.res.signtask.GetSignTaskPreviewUrlRes;
//import com.fasc.open.api.v5_1.res.signtask.ListSignTaskActorRes;
//import com.fasc.open.api.v5_1.res.signtask.ListSignTaskFieldRes;
//import com.fasc.open.api.v5_1.res.signtask.OwnerDownloadUrlRes;
//import com.fasc.open.api.v5_1.res.signtask.SignTaskActorGetUrlRes;
//import com.fasc.open.api.v5_1.res.signtask.SignTaskCatalogListRes;
//import com.fasc.open.api.v5_1.res.signtask.SignTaskDetailRes;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
///**
// * 签署任务Demo
// */
//
//
////@Component
//public class SignTaskDemo extends BaseDemo {
////    @Autowired
//    private FddService btoFddService;
//    private static SignTaskClient signTaskClient;
//    private static EUIClient euiClient;
//
//    public static void main(String[] args) {
//        try {
//            BaseDemo baseDemo = new BaseDemo();
//            openApiClient = baseDemo.getClient();
//            signTaskClient = new SignTaskClient(openApiClient);
//            euiClient = new EUIClient(openApiClient);
//            //获取应用accessToken
//            accessToken = baseDemo.getAccessToken(openApiClient);
//
//            //创建签署任务
////            createSignTask();
//            //创建签署任务（基于签署模板）
//            createWithTemplate();
//
//            //添加签署任务文档
//            addDocs();
//            //移除签署任务文档
//            deleteDocs();
//            //添加签署任务控件
//            addField();
//            //移除签署任务控件
//            deleteField();
//            //添加签署任务附件
//            addAttachs();
//            //移除签署任务附件
//            deleteAttachs();
//            //添加签署任务参与方
//            addActors();
//            //移除签署任务参与方
//            deleteActors();
//
//            //查询企业签署任务文件夹
//            signTaskCataloglist();
//            //查询签署任务控件信息
//            listSignTaskField();
//            //查询签署任务参与方信息
//            listSignTaskActor();
//
//            //填写签署任务控件内容
//            fillField();
//            //发起签署任务
//            start();
//            //定稿签署任务文档
//            docFinalize();
//
//            //撤销签署任务
//            cancel();
//            //阻塞签署任务
//            block();
//            //解阻签署任务
//            unblock();
//              //签署任务催办
//            signTaskUrge() ;
//
//            //获取签署任务详情
//            getAppDetail();
//            //查询签署任务审批信息
//            getApprovalInfo() ;
//            //下载签署任务文档
//            getOwnerDownloadUrl();
//            // 获取指定归属方的签署任务列表
//            getOwnerList();
//
//            //获取批量签署链接
//            getBatchSignUrl() ;
//
//            //获取参与方专属链接
////            getActorUrl() ;
//
//            //获取签署任务编辑链接
//            getSignTaskEditUrl() ;
//
//            //获取签署任务预览链接
//            getSignTaskPreviewUrl() ;
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//
////    @PostConstruct
//    public void init(){
//        signTaskClient = new SignTaskClient(btoFddService.getFddOpenApiClient());
////        accessToken = btoFddService.getFddAccessToken();
//    }
//
//    public static void getApprovalInfo() throws ApiException{
//        GetApprovalInfoReq getApprovalInfoReq = new GetApprovalInfoReq();
//        //签署任务ID
//        getApprovalInfoReq.setSignTaskId(signTaskId);
//        getApprovalInfoReq.setAccessToken(accessToken);
//
//        BaseRes<GetApprovalInfoRes> res = signTaskClient.getApprovalInfo(getApprovalInfoReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 获取签署任务编辑链接
//     * @throws ApiException
//     * */
//    public static void getSignTaskEditUrl()  throws ApiException{
//        GetSignTaskUrlReq getSignTaskUrlReq = new GetSignTaskUrlReq();
//        //签署任务ID
//        getSignTaskUrlReq.setSignTaskId(signTaskId);
//        //重定向地址
//        getSignTaskUrlReq.setRedirectUrl("http://www.baidu.com");
//        getSignTaskUrlReq.setAccessToken(accessToken);
//
//        BaseRes<GetSignTaskEditUrlRes> res = signTaskClient.getSignTaskEditUrl(getSignTaskUrlReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 获取签署任务预览链接
//     * @throws ApiException
//     */
//    public static void getSignTaskPreviewUrl()  throws ApiException{
//        GetSignTaskUrlReq getSignTaskUrlReq = new GetSignTaskUrlReq();
//        //重定向地址
//        getSignTaskUrlReq.setRedirectUrl("http://www.baidu.com");
//        //签署任务ID
//        getSignTaskUrlReq.setSignTaskId(signTaskId);
//        getSignTaskUrlReq.setAccessToken(accessToken);
//
//        BaseRes<GetSignTaskPreviewUrlRes> res = signTaskClient.getSignTaskPreviewUrl(getSignTaskUrlReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     *查询企业签署任务文件夹
//     * @throws ApiException
//     */
//    public static void signTaskCataloglist()  throws ApiException{
//        SignTaskCatalogListReq signTaskCatalogListReq = new SignTaskCatalogListReq();
//        //签署任务文件夹的归属主体
//        OpenId ownerId = new OpenId();
//        ownerId.setIdType(IdTypeEnum.CORP.getCode());
//        ownerId.setOpenId(openCorpId);
//        signTaskCatalogListReq.setOwnerId(ownerId);
//        signTaskCatalogListReq.setAccessToken(accessToken);
//
//        BaseRes<List<SignTaskCatalogListRes>> res = signTaskClient.signTaskCataloglist(signTaskCatalogListReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     *查询签署任务控件信息
//     * @throws ApiException
//     */
//    public static void listSignTaskField()  throws ApiException{
//        ListSignTaskFieldReq listSignTaskFieldReq = new ListSignTaskFieldReq();
//        //签署任务ID
//        listSignTaskFieldReq.setSignTaskId(signTaskId);
//        listSignTaskFieldReq.setAccessToken(accessToken);
//
//        BaseRes<ListSignTaskFieldRes> res = signTaskClient.listSignTaskField(listSignTaskFieldReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     *查询签署任务参与方信息
//     * @throws ApiException
//     */
//    public static void listSignTaskActor()  throws ApiException{
//        ListSignTaskActorReq listSignTaskActorReq = new ListSignTaskActorReq();
//        //签署任务ID
//        listSignTaskActorReq.setSignTaskId(signTaskId);
//        listSignTaskActorReq.setAccessToken(accessToken);
//
//        BaseRes<List<ListSignTaskActorRes>> res = signTaskClient.listSignTaskActor(listSignTaskActorReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 获取参与方专属链接
//     * @throws ApiException
//     */
//    public BaseRes<SignTaskActorGetUrlRes> getActorUrl(SignTaskActorGetUrlReq signTaskActorGetUrlReq) throws ApiException{
//        signTaskActorGetUrlReq.setAccessToken(accessToken);
//        BaseRes<SignTaskActorGetUrlRes> res = signTaskClient.signTaskActorGetUrl(signTaskActorGetUrlReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//
//        return res;
//    }
//
//    /**
//     * 获取批量签署链接
//     * @throws ApiException
//     */
//    public static void getBatchSignUrl() throws ApiException {
//        GetBatchSignUrlReq getBatchSignUrlReq = new GetBatchSignUrlReq();
//        //签署主体(个人openUserId或者企业openCorpId)
//        OpenId ownerId = new OpenId();
//        ownerId.setIdType(IdTypeEnum.CORP.getCode());
//        ownerId.setOpenId(openCorpId);
//        getBatchSignUrlReq.setOwnerId(ownerId);
//        //应用系统中唯一确定登录用户身份的标识，如应用系统中该用户标识和法大大的账号存在映射关系，则可以实现免登进入签署页面进行签署。
//        getBatchSignUrlReq.setClientUserId(clientUserId);
//        //签署任务ID列表。
//        List<String> signTaskIds = new ArrayList<>();
//        signTaskIds.add(signTaskId);
//        getBatchSignUrlReq.setSignTaskIds(signTaskIds);
//        //重定向地址
//        getBatchSignUrlReq.setRedirectUrl("http://www.baidu.com");
//        //指定的企业成员Id,签署主体为企业的情况下必填
//        getBatchSignUrlReq.setMemberId(Long.valueOf(memberId));
//        getBatchSignUrlReq.setAccessToken(accessToken);
//
//        BaseRes<BatchSignUrlRes> res = signTaskClient.getBatchSignUrl(getBatchSignUrlReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//
//    }
//
//    /**
//     * 创建签署任务
//     *
//     * @throws ApiException
//     */
//    public BaseRes<CreateSignTaskRes> createSignTask(CreateSignTaskReq createSignTaskReq) throws ApiException {
//        createSignTaskReq.setAccessToken(accessToken);
//        BaseRes<CreateSignTaskRes> res = signTaskClient.create(createSignTaskReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//        return res;
//    }
//
//    /**
//     * 签署任务--文档列表
//     * 添加待签署的文档列表
//     */
//    private static AddDocInfo getDoc() {
//        AddDocInfo docInfo = new AddDocInfo();
//        //指定文档序号。
//        docInfo.setDocId("文档序号");
//        //指定在本签署任务中的文档名称。
//        docInfo.setDocName("文档名称");
//        //（可选）文档fileId。该参数和docTemplateId只能有一个，且必须有一个。
//        docInfo.setDocFileId(BaseDemo.docFileId);
//        //（可选）文档模板ID。
//        docInfo.setDocTemplateId(BaseDemo.docTemplateId);
//        //（可选）可在文档中添加一些控件。注：当前仅支持添加签章控件。
//        docInfo.setDocFields(fields());
//        return docInfo;
//    }
//
//    /**
//     * 签署任务--附件列表
//     * 添加附件列表，附件数上限为20个。
//     */
//    private static List<AddAttachInfo> getAttachs() {
//        List<AddAttachInfo> attachs = new ArrayList<>();
//        AddAttachInfo attachInfo = new AddAttachInfo();
//        //附件序号。
//        attachInfo.setAttachId("附件序号");
//        //附件名称。
//        attachInfo.setAttachName("附件名称");
//        //附件fileId。
//        attachInfo.setAttachFileId(BaseDemo.attachFileId);
//        attachs.add(attachInfo);
//        return attachs;
//    }
//
//    /**
//     * 签署任务--参与方列表
//     */
//    private static List<AddActorsInfo> getActors() throws ApiException {
//        List<AddActorsInfo> addActors = new ArrayList<>();
//
//        //参与方一：个人参与方
//        //参与方标识
//        String actorId = "个人方";
//        //参与方主体类型ActorTypeEnum
//        String actorType = ActorTypeEnum.PERSON.getCode();
//        //参与方具体名称
//        String actorName = "个人方名称";
//        //参与方权限列表ActorPermissionEnum
//        String[] permissions = new String[]{
//                ActorPermissionEnum.SIGN.getCode()
//        };
//        //（可选）参与方主体在应用上的OpenId
//        String actorOpenId = openUserId;
//        //（可选）参与方主体的法大大号
//        String actorFDDId = null;
//        //（可选）参与方身份名称匹配信息
//        String identNameForMatch = null;
//        //（可选）参与方证件号码匹配信息
//        String certNoForMatch = null;
//        //（可选）法大大送达信息
//        Notification notification = Notification.getInstance(false, NotifyWayEnum.MOBILE.getCode(), mobile);
//        Actor person = getActor(actorId, actorType, actorName, permissions,
//                actorOpenId, actorFDDId,
//                null, identNameForMatch, certNoForMatch,
//                notification
//        );
//
//        //（可选）签署权限参与方关联的签章控件列表。
//        List<AddSignFieldInfo> signFields = new ArrayList<>();
//        AddSignFieldInfo addSignFieldInfo = getAddSignFieldInfo("文档序号", "个人签署控件编码", "个人签署控件名称", null,true);
//        signFields.add(addSignFieldInfo);
//
//        //（可选）签署权限参与方的签署配置信息
//        //（可选）参与方签署序号
//        Integer orderNo = new Integer(1);
//        //（可选）是否暂时阻塞
//        Boolean blockHere = false;
//        //（可选）是否请求该参与方免验证签
//        Boolean requestVerifyFree = false;
//        //（可选）个人参与方的签署方式SignerSignMethodEnum
//        String signerSignMethod = SignerSignMethodEnum.UNLIMITED.getCode();
//        //(可选 ) 允许该参与方使用的身份和意愿确认方式
//        List<String> verifyMethods = null;
//        //企业参与方成员能否通过链接打开签署任务
//        Boolean joinByLink = true;
//        // 是否要求该参与方将所有文档（不包含附件）阅读至末页才可签署
//        Boolean readingToEnd = false ;
//        // 要求该参与方的最少阅读时间，单位为秒
//        String readingTime = null;
//        AddSignConfigInfo signConfigInfo = getAddSignConfigInfo(orderNo, blockHere, requestVerifyFree, signerSignMethod, false,
//                                                verifyMethods, joinByLink, readingToEnd , readingTime,false);
//        AddActorsInfo addPerson = new AddActorsInfo();
//        addPerson.setActor(person);
//        addPerson.setSignFields(signFields);
//        addPerson.setSignConfigInfo(signConfigInfo);
//        addActors.add(addPerson);
//
//        //参与方二：企业参与方
//        // 参与方企业成员列表
//        List<ActorCorpMember> actorCorpMembers = new ArrayList<>();
//        ActorCorpMember actorCorpMember = new ActorCorpMember();
//        actorCorpMember.setMemberId(String.valueOf(memberId));
//        actorCorpMembers.add(actorCorpMember);
//
//        //（可选）法大大送达信息
//        Notification corpNotification = Notification.getInstance(false, NotifyWayEnum.MOBILE.getCode(), mobile);
//
//        Actor corp = getActor("企业方", ActorTypeEnum.CORP.getCode(), "企业方名称", new String[]{
//                        ActorPermissionEnum.SIGN.getCode()
//                },
//                BaseDemo.openCorpId, null,
//                actorCorpMembers.toArray(new ActorCorpMember[actorCorpMembers.size()]), null, null,
//                corpNotification
//        );
//
//        //签署权限参与方关联的签章控件列表。
//        List<AddSignFieldInfo> signFields1 = new ArrayList<>();
//        AddSignFieldInfo addSignFieldInfo1 = getAddSignFieldInfo("文档序号", "企业签署控件编码", "企业签署控件名称", null , true);
//        AddSignFieldInfo addSignFieldInfo2 = getAddSignFieldInfo("文档序号", "企业经办人个人签署控件编码", "企业经办人个人签署控件名称", null , true);
//        signFields1.add(addSignFieldInfo1);
//        signFields1.add(addSignFieldInfo2);
//
//        //签署权限参与方的签署配置信息
//        AddSignConfigInfo signConfigInfo1 = getAddSignConfigInfo(2, false, false, SignerSignMethodEnum.UNLIMITED.getCode(),
//                    false,verifyMethods,true ,false , null, true);
//
//        AddActorsInfo addCorp = new AddActorsInfo();
//        addCorp.setActor(corp);
//        addCorp.setSignFields(signFields1);
//        addCorp.setSignConfigInfo(signConfigInfo1);
//        addActors.add(addCorp);
//        return addActors;
//    }
//
//
//    /**
//     * 创建签署任务 (基于签署模板)
//     *
//     * @throws ApiException
//     */
//    public static void createWithTemplate() throws ApiException {
//        CreateWithTemplateReq createWithTemplateReq = new CreateWithTemplateReq();
//        createWithTemplateReq.setAccessToken(accessToken);
//        //该签署任务的发起方。
//        createWithTemplateReq.setInitiator(OpenId.getInstance(IdTypeEnum.CORP.getCode(), openCorpId));
//        //签署任务主题。长度最大100个字符。
//        createWithTemplateReq.setSignTaskSubject("签署任务模板签署任务");
//        //指定签署模板ID。 法大大平台将从该签署模板中复制预先设定的文档、控件和签署方，并对每个签署方指定具体的用户或企业。
//        createWithTemplateReq.setSignTemplateId(signTemplateId);
//        //（可选）任务过期时间。
//        createWithTemplateReq.setExpiresTime(null);
//        //（可选）签署任务是否自动发起协作流程：false: 不自动发起 true: 自动发起 默认为false。
//        createWithTemplateReq.setAutoStart(true);
//        //（可选）全部必填控件填写完成后是否自动定稿：false: 不自动定稿 true: 自动定稿 默认为true。
//        createWithTemplateReq.setAutoFillFinalize(true);
//        //（可选）您的业务应用系统中的业务场景信息，用于更好地定义业务场景和签署任务的关系。
//        BusinessSceneInfo businessSceneInfo = new BusinessSceneInfo();
//        //（可选）业务场景标识。长度最大32字节。指定该签署任务是某个特定业务场景的，参与各方可能对该业务场景有不同的控制逻辑和规则。
//        businessSceneInfo.setBusinessId(businessId);
//        //（可选）业务参考号，由应用系统基于自身业务上下文提供。长度最大100个字符。该参数用于应用系统和签署任务建立关联关系，方便业务流程和数据的关联，例如可以是电商场景的订单号。
//        businessSceneInfo.setTransReferenceId(transReferenceId);
//        //有必要的设置BusinessScene值
//        createWithTemplateReq.setBusinessScene(null);
//
//        //（可选）参与方列表。
//        createWithTemplateReq.setActors(getSignTemplateActors());
//
//        System.out.println(openApiClient.getJsonStrategy().toJson(createWithTemplateReq));
//        BaseRes<CreateSignTaskRes> res = signTaskClient.createWithTemplate(createWithTemplateReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 签署任务--签署模板的参与方列表
//     */
//    private static List<AddActorsTempInfo> getSignTemplateActors() throws ApiException {
//        List<AddActorsTempInfo> addActors = new ArrayList<>();
//
//        //参与方一：个人参与方
//        //参与方标识：需要与签署模板中保持一致
//        String actorId = "个人方";
//        //参与方具体名称
//        String actorName = "个人方名称";
//        //（可选）参与方主体在应用上的OpenId
//        String actorOpenId = openUserId;
//        //（可选）参与方主体的法大大号
//        String actorFDDId = null;
//        //（可选）参与方身份名称匹配信息
//        String identNameForMatch = null;
//        //（可选）参与方证件号码匹配信息
//        String certNoForMatch = null;
//        //（可选）法大大送达信息
//        Notification notification = Notification.getInstance(true, NotifyWayEnum.MOBILE.getCode(), mobile);
//        Actor person = getActor(actorId, IdTypeEnum.PERSON.getCode(), actorName, null,
//                actorOpenId, actorFDDId,
//                null, identNameForMatch, certNoForMatch,
//                notification
//        );
//
//        //（可选）签署权限参与方关联的签章控件列表。
//        List<AddSignFieldInfo> signFields = new ArrayList<>();
//        AddSignFieldInfo addSignFieldInfo = getAddSignFieldInfo(TemplateFieldDocId, "个人签署控件编码", "个人签署控件名称", null,true);
//        signFields.add(addSignFieldInfo);
//
//        //（可选）签署权限参与方的签署配置信息
//        TemplateSignConfigInfoReq signConfigInfo = new TemplateSignConfigInfoReq();
//        //(可选）参与方签署序号
//        signConfigInfo.setOrderNo(1);
//        //（可选）个人参与方或企业参与方经办人的签署方式
//        signConfigInfo.setSignerSignMethod(null);
//        //（可选）是否要求该参与方将所有文档（不包含附件）阅读至末页才可签署
//        signConfigInfo.setReadingToEnd(null);
//        //（可选）要求该参与方的最少阅读时间，单位为秒
//        signConfigInfo.setReadingTime(null);
//        //（可选）允许该参与方使用的身份和意愿确认方式
//        signConfigInfo.setVerifyMethods(null);
//        //（可选）企业参与方成员能否通过链接打开签署任务
//        signConfigInfo.setJoinByLink(null);
//        //（可选）是否暂时阻塞
//        signConfigInfo.setBlockHere(false);
//        //（可选）是否请求该参与方免验证签
//        signConfigInfo.setRequestVerifyFree(false);
//        //（可选）要求该参与方必须实名才能查看签署任务，默认true
//        signConfigInfo.setIdentifiedView(false);
//
//        AddActorsTempInfo addPerson = new AddActorsTempInfo();
//        addPerson.setActor(person);
//        addPerson.setSignFields(signFields);
//        addPerson.setSignConfigInfo(signConfigInfo);
//        addActors.add(addPerson);
//
//        //参与方二：企业参与方
//        // actorId必须与签署模板中保持一致，actorType和permission以签署模板中为准，不用传参。
//        //（可选）参与方企业成员列表
//        ActorCorpMember actorCorpMember = new ActorCorpMember();
//        actorCorpMember.setMemberId(String.valueOf(memberId));
//
//        //通知方式
//        Notification notification1 =  Notification.getInstance(false, NotifyWayEnum.MOBILE.getCode(), mobile);
//
//        Actor corp = getActor("企业方",IdTypeEnum.CORP.getCode() , "企业方名称", new String[]{ActorPermissionEnum.SIGN.getCode()},
//                BaseDemo.openCorpId, null, new ActorCorpMember[]{actorCorpMember}
//                , null, null,
//                notification1
//        );
//
//        //（可选）签署权限参与方关联的签章控件列表。
//        List<AddSignFieldInfo> signFields2 = new ArrayList<>();
//        AddSignFieldInfo addSignFieldInfo2 = getAddSignFieldInfo(TemplateFieldDocId, "企业签署控件编码", "企业签署控件名称", null,true);
//        signFields2.add(addSignFieldInfo2);
//
//        //签署权限参与方的签署配置信息
//        TemplateSignConfigInfoReq signConfigInfo1 = new TemplateSignConfigInfoReq();
//        //（可选）是否暂时阻塞
//        signConfigInfo1.setBlockHere(false);
//        //（可选）是否请求该参与方免验证签
//        signConfigInfo1.setRequestVerifyFree(false);
//
//        AddActorsTempInfo addCorp = new AddActorsTempInfo();
//        addCorp.setActor(corp);
//        addCorp.setSignFields(signFields2);
//        addCorp.setSignConfigInfo(signConfigInfo1);
//        addActors.add(addCorp);
//        return addActors;
//    }
//
//    /**
//     * 添加签署任务文档
//     *
//     * @throws ApiException
//     */
//    public static void addDocs() throws ApiException {
//        AddDocReq addDocReq = new AddDocReq();
//        addDocReq.setAccessToken(accessToken);
//        //签署任务ID
//        addDocReq.setSignTaskId(signTaskId);
//        //待签署的文档列表，可一次添加多份文档，一个签署任务中文档数上限为20个。一个签署任务中可包含多份文档，请根据您的业务需要合理定义文档，例如：建议将实际的业务中的”合同“定义到一个签署任务中当做文档。需要理解的是，携带的文档数量越多，将消耗更多的系统资源，并可能影响性能。在您和法大大的商务约定中，可能有限制一个签署任务中文档的数量上限，如遇问题，请咨询您组织中的商务人员。
//        List<AddDocInfo> docs = new ArrayList<>();
//        docs.add(getDoc());
//        addDocReq.setDocs(docs);
//        BaseRes<Void> res = signTaskClient.addDoc(addDocReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 签署任务文档--控件列表
//     * 获取控件
//     */
//    private static List<Field> fields() {
//        List<Field> docFields = new ArrayList<>();
//
//        Field field1 = new Field();
//        //控件编码
//        field1.setFieldId("个人签署控件编码");
//        //控件名称
//        field1.setFieldName("个人签署控件名称");
//        //控件类型FieldTypeEnum
//        field1.setFieldType(FieldTypeEnum.PERSON_SIGN.getCode());
//        //控件定位
//        field1.setPosition(getFieldPosition(PositionModeEnum.PIXEL.getCode(), 1, "100", "100", null));
//        docFields.add(field1);
//
//        Field field2 = new Field();
//        //控件编码
//        field2.setFieldId("企业签署控件编码");
//        //控件名称
//        field2.setFieldName("企业签署控件名称");
//        //控件类型FieldTypeEnum
//        field2.setFieldType(FieldTypeEnum.CORP_SEAL.getCode());
//        //控件定位
//        field2.setPosition(getFieldPosition(PositionModeEnum.PIXEL.getCode(), 1, "250", "250", null));
//        docFields.add(field2);
//
//        Field field3 = new Field();
//        //控件编码
//        field3.setFieldId("企业经办人个人签署控件编码");
//        //控件名称
//        field3.setFieldName("企业经办人个人签署控件名称");
//        //控件类型FieldTypeEnum
//        field3.setFieldType(FieldTypeEnum.PERSON_SIGN.getCode());
//        //控件定位
//        field3.setPosition(getFieldPosition(PositionModeEnum.PIXEL.getCode(), 1, "350", "350", null));
//        docFields.add(field3);
//        return docFields;
//    }
//
//    /**
//     * 移除签署任务文档
//     *
//     * @throws ApiException
//     */
//    public static void deleteDocs() throws ApiException {
//        DeleteDocReq deleteDocReq = new DeleteDocReq();
//        deleteDocReq.setAccessToken(accessToken);
//        //签署任务ID
//        deleteDocReq.setSignTaskId(signTaskId);
//        //文档序号docId列表。可一次性删除多个文档，如果列表中有的docId在该签署任务中已不存在，同样返回成功。
//        deleteDocReq.setDocIds(Arrays.asList(new String[]{"1"}));
//        BaseRes<Void> res = signTaskClient.deleteDoc(deleteDocReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 添加签署任务控件
//     *
//     * @throws ApiException
//     */
//    public static void addField() throws ApiException {
//        AddFieldReq addFieldReq = new AddFieldReq();
//        addFieldReq.setAccessToken(accessToken);
//        //签署任务ID
//        addFieldReq.setSignTaskId(signTaskId);
//        //控件列表，可一次添加多个。
//        List<AddFieldInfo> fields = new ArrayList<>();
//        AddFieldInfo fieldInfo = new AddFieldInfo();
//        //指定文档序号。
//        fieldInfo.setDocId("文档序号");
//        //文档中的签章控件列表，注意同一个docId中的各个控件的fieldId不能重复。
//        fieldInfo.setDocFields(fields());
//        fields.add(fieldInfo);
//        addFieldReq.setFields(fields);
//        BaseRes<Void> res = signTaskClient.addField(addFieldReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 移除签署任务控件
//     *
//     * @throws ApiException
//     */
//    public static void deleteField() throws ApiException {
//        DeleteFieldReq deleteFieldReq = new DeleteFieldReq();
//        deleteFieldReq.setAccessToken(accessToken);
//        //签署任务ID
//        deleteFieldReq.setSignTaskId(signTaskId);
//        //控件列表。
//        List<DeleteFieldInfo> fields = new ArrayList<>();
//        DeleteFieldInfo fieldInfo = new DeleteFieldInfo();
//        //指定文档序号。
//        fieldInfo.setDocId("文档序号");
//        //待移除的docId中的控件编码列表。
//        String[] fieldIds = {"000001", "000002"};
//        fieldInfo.setFieldIds(Arrays.asList(fieldIds));
//        fields.add(fieldInfo);
//        deleteFieldReq.setFields(fields);
//        BaseRes<Void> res = signTaskClient.deleteField(deleteFieldReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 添加签署任务附件
//     *
//     * @throws ApiException
//     */
//    public static void addAttachs() throws ApiException {
//        AddAttachReq addAttachReq = new AddAttachReq();
//        addAttachReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        addAttachReq.setSignTaskId(signTaskId);
//        //附件列表。
//        List<AddAttachInfo> attachs = getAttachs();
//        addAttachReq.setAttachs(attachs);
//        BaseRes<Void> res = signTaskClient.addAttach(addAttachReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 移除签署任务附件
//     *
//     * @throws ApiException
//     */
//    public static void deleteAttachs() throws ApiException {
//        DeleteAttachReq deleteAttachReq = new DeleteAttachReq();
//        deleteAttachReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        deleteAttachReq.setSignTaskId(signTaskId);
//        //附件序号attachId列表
//        deleteAttachReq.setAttachIds(Arrays.asList(new String[]{"附件序号"}));
//        BaseRes<Void> res = signTaskClient.deleteAttach(deleteAttachReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 添加签署任务参与方
//     *
//     * @throws ApiException
//     */
//    public static void addActors() throws ApiException {
//        AddActorsReq addActorsReq = new AddActorsReq();
//        addActorsReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        addActorsReq.setSignTaskId(signTaskId);
//        //参与方列表。
//        addActorsReq.setActors(getActors());
//        BaseRes<Void> res = signTaskClient.addActor(addActorsReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 移除签署任务参与方
//     *
//     * @throws Exception
//     */
//    public static void deleteActors() throws Exception {
//        DeleteActorReq deleteActorReq = new DeleteActorReq();
//        deleteActorReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        deleteActorReq.setSignTaskId(signTaskId);
//        //参与方在签署任务中被设定的唯一标识
//        deleteActorReq.setActorIds(Arrays.asList(new String[]{"actor1", "actor2"}));
//        BaseRes<Void> res = signTaskClient.deleteActor(deleteActorReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 填写签署任务控件内容
//     *
//     * @throws ApiException
//     */
//    public static void fillField() throws ApiException {
//        FillFieldValuesReq fillFieldValuesReq = new FillFieldValuesReq();
//        fillFieldValuesReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        fillFieldValuesReq.setSignTaskId(signTaskId);
//        //填写类控件列表
//        fillFieldValuesReq.setDocFieldValues(getDocFieldValues());
//        BaseRes<Void> res = signTaskClient.fillFieldValues(fillFieldValuesReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 填写签署任务控件内容--填写控件列表
//     */
//    private static List<DocFieldValueInfo> getDocFieldValues() {
//        List<DocFieldValueInfo> docFieldValues = new ArrayList<>();
//        //填写控件对象
//        DocFieldValueInfo field = new DocFieldValueInfo();
//        //文档序号。
//        field.setDocId("1");
//        //控件编码。仅支持填写类控件。
//        field.setFieldId("控件编码");
//        field.setFieldValue("填写的值");
//        docFieldValues.add(field);
//        return docFieldValues;
//    }
//
//    /**
//     * 提交签署任务
//     *
//     * @throws ApiException
//     */
//    public static void start() throws ApiException {
//        SignTaskBaseReq signTaskBaseReq = new SignTaskBaseReq();
//        signTaskBaseReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        signTaskBaseReq.setSignTaskId(signTaskId);
//        BaseRes<Void> res = signTaskClient.start(signTaskBaseReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 定稿签署任务
//     *
//     * @throws ApiException
//     */
//    public static void docFinalize() throws ApiException {
//        SignTaskBaseReq signTaskBaseReq = new SignTaskBaseReq();
//        signTaskBaseReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        signTaskBaseReq.setSignTaskId("签署任务id");
//        BaseRes<Void> res = signTaskClient.finalizeDoc(signTaskBaseReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 撤销签署任务
//     *
//     * @throws ApiException
//     */
//    public static void cancel() throws ApiException {
//        SignTaskCancelReq signTaskBaseReq = new SignTaskCancelReq();
//        signTaskBaseReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        signTaskBaseReq.setSignTaskId(signTaskId);
//        BaseRes<Void> res = signTaskClient.cancel(signTaskBaseReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 阻塞签署任务
//     *
//     * @throws ApiException
//     */
//    public static void block() throws ApiException {
//        BlockReq blockReq = new BlockReq();
//        blockReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        blockReq.setSignTaskId(signTaskId);
//        //指定的参与方在本签署任务中的标识
//        blockReq.setActorId("actor1");
//        BaseRes<Void> res = signTaskClient.block(blockReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 解阻签署任务
//     *
//     * @throws ApiException
//     */
//    public static void unblock() throws ApiException {
//        UnblockReq unblockReq = new UnblockReq();
//        unblockReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        unblockReq.setSignTaskId("签署任务id");
//        //指定的参与方在本签署任务中的标识
//        unblockReq.setActorId("指定的参与方在本签署任务中的标识");
//        BaseRes<Void> res = signTaskClient.unblock(unblockReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//    /**
//     * 催办签署任务
//     *
//     * @throws ApiException
//     */
//    public static void signTaskUrge() throws ApiException {
//        SignTaskBaseReq signTaskBaseReq = new SignTaskBaseReq();
//        signTaskBaseReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        signTaskBaseReq.setSignTaskId(signTaskId);
//        BaseRes<Void> res = signTaskClient.signTaskUrge(signTaskBaseReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 获取应用的签署任务详情
//     *
//     * @throws Exception
//     */
//    public static void getAppDetail() throws Exception {
//        SignTaskBaseReq signTaskBaseReq = new SignTaskBaseReq();
//        signTaskBaseReq.setAccessToken(accessToken);
//        //签署任务id，通过创建签署任务接口返回
//        signTaskBaseReq.setSignTaskId("1671609373736124649");
//        BaseRes<SignTaskDetailRes> res = signTaskClient.getDetail(signTaskBaseReq);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 获取指定归属方的签署任务文档下载地址
//     *
//     * @throws ApiException
//     */
//    public static void getOwnerDownloadUrl() throws ApiException {
//        GetOwnerDownloadUrlReq req = new GetOwnerDownloadUrlReq();
//        req.setAccessToken(accessToken);
//        //签署任务发起方或参与方
//        req.setOwnerId(OpenId.getInstance(IdTypeEnum.CORP.getCode(), BaseDemo.openCorpId));
//        //签署任务id，通过创建签署任务接口返回
//        req.setSignTaskId(signTaskId);
//        //（可选）文档类型FileTypeEnum：doc：签署任务中的文档 。 attach：签署任务中的附件。
//        req.setFileType(FileTypeEnum.DOC.getCode());
//        //（可选）指定签署任务中的文档序号docId或附件序号attachId。
//        req.setId("1");
//        BaseRes<OwnerDownloadUrlRes> res = signTaskClient.getOwnerDownloadUrl(req);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//    /**
//     * 获取指定归属方的签署任务列表
//     *
//     * @throws ApiException
//     */
//    public static void getOwnerList() throws ApiException {
//        GetOwnerSignTaskListReq req = new GetOwnerSignTaskListReq();
//        req.setAccessToken(accessToken);
//        //签署任务发起方或参与方主体
//        req.setOwnerId(OpenId.getInstance(IdTypeEnum.CORP.getCode(), BaseDemo.openCorpId));
//        //（可选）主体参与签署协作类型。initiator:  发起方， actor:  参与方(填写、签署)。
//        req.setOwnerRole("initiator");
//        //（可选）查询条件
//        SignTaskListFilter filter = new SignTaskListFilter();
//        //（可选）签署任务名称
//        filter.setSignTaskSubject("测试类合同");
//        //（可选）签署任务状态SignTaskStatusEnum，支持传入多个状态
//        filter.setSignTaskStatus(Arrays.asList(new String[]{SignTaskStatusEnum.TASK_TERMINATED.getCode(),
//                SignTaskStatusEnum.TASK_FINISHED.getCode()}));
//        req.setListFilter(filter);
//        //（可选）指定第几页
//        req.setListPageNo(1);
//        //（可选）指定每页多少条数据
//        req.setListPageSize(100);
//
//        System.out.println(openApiClient.getJsonStrategy().toJson(req));
//        BaseRes<GetSignTaskListRes> res = signTaskClient.getOwnerList(req);
//        ResultUtil.printLog(res, openApiClient.getJsonStrategy());
//    }
//
//
//}
